﻿/*-----------------------------------------------
// File: BattleBuff.cs
// Description: 
// Author: Shaobing	492057342@qq.com
-----------------------------------------------*/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Battle.View
{
    //public class BattleBuff
    //{
    //    public string uniqueId;
    //    public string buffId;

    //    public ParticleDataWithBind buffOnParticle;
    //    public ParticleDataWithBind buffOffParticle;
    //    public ParticleDataWithBind buffLastParticle;
    //    public ParticleDataWithBind buffHitParticle;

    //    public BattleCharacter mounter;

    //    ParticleObj buffOnObj;
    //    ParticleObj buffOffObj;
    //    ParticleObj buffLastObj;

    //    public string iconName;

    //    public bool isStun;

    //    public bool isLoadComplete = false;



    //    void PlayBuffParticle(ParticleObj obj, bool isAutoRecovery) {
    //            mounter.PlayParticle(obj, mounter.particleScale);
    //            if (isAutoRecovery) {
    //                mounter.ParticleRecovery(obj, true, obj.data.duration);
    //            }
    //        if (mounter.GetCurrrentStateType() != ActorState.Ultimated && mounter.GetCurrrentStateType() != ActorState.Ultimate) {
    //            obj.obj.SetActive(true);
    //        }
    //        else
    //        {
    //            obj.obj.SetActive(false);
    //        }
    //    }


    //    public BattleBuff() { }

    //    Dict.DataModel.TableBuff tableBuff;
    //    public void Init(ProtoBuf.Message.Buffer buff) {
    //        uniqueId = buff.uid;
    //        buffId = buff.bufferId;
    //        var dict = Dict.Blo.DictBuffBlo.GetTableBuff(buffId);
    //        SetData(dict);
    //        mounter = BattleViewCtrl.GetInstance().GetBattleCharacter(buff.targetUid);
    //        mounter.AddBuff(this);
    //        isLoadComplete = false;
    //    }

    //    public void Init(BuffData buff) {
    //        uniqueId = buff.uniqueId;
    //        buffId = buff.buffId;
    //        var dict = Dict.Blo.DictBuffBlo.GetTableBuff(buffId);
    //        SetData(dict);
    //        mounter = BattleViewCtrl.GetInstance().GetBattleCharacter(buff.targetUid);
    //        mounter.AddBuff(this);
    //        isLoadComplete = false;
    //    }

    //    void SetData(Dict.DataModel.TableBuff dict) {
    //        tableBuff = dict;
    //        if (tableBuff != null) {
    //            if (!string.IsNullOrEmpty(tableBuff.EffectOn) && !string.IsNullOrEmpty(tableBuff.EffectOnBone)) { 
    //                buffOnParticle = ParticleData.CreateParticleData(tableBuff.EffectOn, tableBuff.EffectOnBone);
    //            }
    //            if (!string.IsNullOrEmpty(tableBuff.EffectOff) && !string.IsNullOrEmpty(tableBuff.EffectOffBone)) { 
    //                buffOnParticle = ParticleData.CreateParticleData(tableBuff.EffectOff, tableBuff.EffectOffBone);
    //            }
    //            if (!string.IsNullOrEmpty(tableBuff.HitEffect) && !string.IsNullOrEmpty(tableBuff.HitEffectBone)) {
    //                buffHitParticle = ParticleData.CreateParticleData(tableBuff.HitEffect, tableBuff.HitEffectBone);
    //            }
    //            if (!string.IsNullOrEmpty(tableBuff.LastEffect) && !string.IsNullOrEmpty(tableBuff.LastEffectBone)) {
    //                buffLastParticle = ParticleData.CreateParticleData(tableBuff.LastEffect, tableBuff.LastEffectBone);
    //            }
    //            iconName = tableBuff.BuffIconName;
    //            if (tableBuff.Factor == Dict.Config.TableFactorConst.dizzy)
    //            {
    //                isStun = true;
    //            }
    //            else {
    //                isStun = false;
    //            }
    //        }
    //    }

    //    public void Update() {

    //    }

    //    public IEnumerator Load() {
    //        int taskCount = 0;
    //        if (buffOnParticle != null) {
    //            BattleViewCtrl.GetInstance().StartCoroutine(BattleFactory.RegistParticle(buffOnParticle.resUrl, () =>
    //            {
    //                taskCount--;
    //            }));
    //            taskCount++;
    //        }
    //        if (buffOffParticle != null)
    //        {
    //            BattleViewCtrl.GetInstance().StartCoroutine(BattleFactory.RegistParticle(buffOffParticle.resUrl, () =>
    //            {
    //                taskCount--;
    //            }));
    //            taskCount++;
    //        }
    //        if (buffHitParticle != null)
    //        {
    //            BattleViewCtrl.GetInstance().StartCoroutine(BattleFactory.RegistParticle(buffHitParticle.resUrl, () =>
    //            {
    //                taskCount--;
    //            }));
    //            taskCount++;
    //        }
    //        if (buffLastParticle != null)
    //        {
    //            BattleViewCtrl.GetInstance().StartCoroutine(BattleFactory.RegistParticle(buffLastParticle.resUrl, () =>
    //            {
    //                taskCount--;
    //            }));
    //            taskCount++;
    //        }

    //        while (taskCount > 0) {
    //            yield return null;
    //        }


    //        if (buffOnParticle != null) {
    //            buffOnObj = BattleFactory.SpawnParticle(buffOnParticle);
    //            if (buffOnObj != null) {
    //                PlayBuffParticle(buffOnObj, true);
    //            }
    //        }
    //        if (buffLastParticle != null) {
    //            buffLastObj = BattleFactory.SpawnParticle(buffLastParticle);
    //            if (buffLastObj != null) {
    //                PlayBuffParticle(buffLastObj, false);
    //            }
    //        }
    //        isLoadComplete = true;
    //    }

    //    public void OnHit(out bool isPlay)
    //    {
    //        isPlay = false;
    //        if (buffHitParticle != null)
    //        {
    //            var obj = BattleFactory.SpawnParticle(buffHitParticle);
    //            if (obj.obj != null)
    //            {
    //                mounter.PlayParticle(obj);
    //                mounter.ParticleRecovery(obj, true, obj.data.duration);
    //                isPlay = true;
    //            }
    //        }
    //    }
    //    public void OnEnterUltimate()
    //    {
    //        if (buffOnObj != null) {
    //            buffOnObj.obj.SetActive(false);
    //        }
    //        if (buffOffObj != null) {
    //            buffOffObj.obj.SetActive(false);
    //        }
    //        if (buffLastObj != null) {
    //            buffLastObj.obj.SetActive(false);
    //        }
    //    }

    //    public void OnLeaveUltimate()
    //    {
    //        if (buffLastObj != null) {
    //            buffLastObj.obj.SetActive(true);
    //        }
    //    }

    //    public void Unload() {
    //        BattleViewCtrl.GetInstance().StartCoroutine(_Unload());
    //        mounter.RemoveBuff(this);
    //    }

    //    IEnumerator _Unload() {
    //        while (!isLoadComplete)
    //        {
    //            yield return null;
    //        }

    //        while (buffOnObj != null && buffOnObj.isShowing) {
    //            yield return null;
    //        }
    //        while (buffOffObj != null && buffOffObj.isShowing) {
    //            yield return null;
    //        }
    //        if (buffLastObj != null) {
    //            mounter.ParticleRecovery(buffLastObj, true);
    //        }
    //        mounter.RemoveBuff(this);
    //        buffOnObj = null;
    //        buffOffObj = null;
    //        buffLastObj = null;

    //        if (buffOnParticle != null)
    //        {
    //            BattleFactory.UnRegistParticle(buffOnParticle.resUrl);
    //        }
    //        if (buffOffParticle != null)
    //        {
    //            BattleFactory.UnRegistParticle(buffOffParticle.resUrl);
    //        }
    //        if (buffLastObj != null) {
    //            BattleFactory.UnRegistParticle(buffLastParticle.resUrl);
    //        }
    //        if (buffHitParticle != null) {
    //            BattleFactory.UnRegistParticle(buffHitParticle.resUrl);
    //        }
    //    }

    //    public void ForceUnload()
    //    {
    //        if (buffOnObj != null && buffOnObj.obj != null) {
    //            BattleFactory.UnSpawn(buffOnObj.obj);
    //        }
    //        if (buffOffObj != null && buffOffObj.obj != null) {
    //            BattleFactory.UnSpawn(buffOffObj.obj);
    //        }
    //        if (buffLastObj != null && buffLastObj.obj != null) {
    //            BattleFactory.UnSpawn(buffLastObj.obj);
    //        }
    //        if (buffOnParticle != null)
    //        {
    //            BattleFactory.UnRegistParticle(buffOnParticle.resUrl);
    //        }
    //        if (buffOffParticle != null)
    //        {
    //            BattleFactory.UnRegistParticle(buffOffParticle.resUrl);
    //        }
    //        if (buffLastParticle != null)
    //        {
    //            BattleFactory.UnRegistParticle(buffLastParticle.resUrl);
    //        }
    //        if (buffHitParticle != null)
    //        {
    //            BattleFactory.UnRegistParticle(buffHitParticle.resUrl);
    //        }
    //    }

    //}
}
